In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#import cv2
from sklearn.cluster import KMeans
In [2]:
df = pd.read_csv('artwork_img_kmean.csv')
In [3]:
#sample_images = df.Artwork_Image_Path.sample(16).tolist(); sample_images
sample_images = [
 'images2/asi2-102572/17.jpg',
 'images2/missingImages/0612776/129.jpg',
 'images2/asi2-108907/24.jpg',
 'images2/asi2-117414/4.jpg',
 'images2/ARTB.P120060425/408.jpg',
 'images2/asi2-114078/63.jpg',
 'images2/asi2-116230/10.jpg',
 'images2/asi2-103033/50.jpg',
 'images2/asi2-108413/73.jpg',
 'images2/asi2-117336/36.jpg',
 'images2/missingImages/0612776/112.jpg',
 'images2/asi2-112679/255.jpg',
 'images2/asi2-101657/62.jpg',
 'images2/asi2-100678/1.jpg',
 'images2/asi2-109828/105.jpg',
 'images2/missingImages/0989500/27.jpg']
sample_images
Out[3]:
['images2/asi2-102572/17.jpg',
 'images2/missingImages/0612776/129.jpg',
 'images2/asi2-108907/24.jpg',
 'images2/asi2-117414/4.jpg',
 'images2/ARTB.P120060425/408.jpg',
 'images2/asi2-114078/63.jpg',
 'images2/asi2-116230/10.jpg',
 'images2/asi2-103033/50.jpg',
 'images2/asi2-108413/73.jpg',
 'images2/asi2-117336/36.jpg',
 'images2/missingImages/0612776/112.jpg',
 'images2/asi2-112679/255.jpg',
 'images2/asi2-101657/62.jpg',
 'images2/asi2-100678/1.jpg',
 'images2/asi2-109828/105.jpg',
 'images2/missingImages/0989500/27.jpg']
In [4]:
fig,axes=plt.subplots(4,4,figsize=(15,15))
for i,iax in enumerate(axes.flatten()):
    iax.imshow(plt.imread(sample_images[i]))
    iax.axis("off")
In [5]:
def find_color_palettes(imgpath):
    #img = cv2.cvtColor(cv2.imread(imgpath), cv2.COLOR_BGR2RGB)
    img = plt.imread(imgpath)
    nrows, ncols, nchns = img.shape
    X = img.reshape(nrows*ncols, nchns)
    n_clusters = 5
    km = KMeans(n_clusters=n_clusters, random_state=0).fit(X)
    assert km.n_iter_ < km.max_iter, "did not converge: iter(n={} max={})".format(km.n_iter_, km.max_iter)
    labels, counts = np.unique(km.labels_, return_counts=True)
    print imgpath
    print pd.DataFrame(km.cluster_centers_.round(0).astype(int)).assign(
        count=counts, label=labels).rename(columns={0:'R',1:'G',2:'B'}).sort_values('count', ascending=False)
    sorted_by_count = sorted(zip(labels, counts), key=lambda x:x[1], reverse=True)
    palettes_by_count = [km.cluster_centers_[label].round(0).astype(int).tolist()
                        for label, count in sorted_by_count]
    plt.subplots(2,1,figsize=(10,10))
    axes  = [plt.subplot2grid((2, n_clusters), (0, 0), colspan=n_clusters)]
    axes += [plt.subplot2grid((2, n_clusters), (1, i)) for i in range(n_clusters)]
    map(lambda ax:ax.axis("off"), axes)
    axes[0].imshow(img)
    for i, p in enumerate(palettes_by_count):
        axes[i+1].imshow([[p]*16]*16)
    plt.tight_layout()
In [6]:
find_color_palettes(sample_images[0])
images2/asi2-102572/17.jpg
     R    G    B  count  label
2  224  218  207  28081      2
4  195  199  192  18432      4
0  170  177  171  18422      0
3  126  141  136   8204      3
1   69   94   93   7011      1
In [7]:
find_color_palettes(sample_images[1])
images2/missingImages/0612776/129.jpg
     R    G    B  count  label
0  164  155  138  38757      0
4  176  168  150  28229      4
3  151  142  125  25364      3
2  190  182  165  17409      2
1  133  126  108  12741      1
In [8]:
find_color_palettes(sample_images[2])
images2/asi2-108907/24.jpg
     R    G    B  count  label
2  215  199  161  42116      2
4  125  120   76  39691      4
1  171  161  117  36110      1
0   74   73   49  35209      0
3  208  180   78  22924      3
In [9]:
find_color_palettes(sample_images[3])
images2/asi2-117414/4.jpg
     R    G    B  count  label
0   55   51   46  84531      0
4   93   75   53  47163      4
2  134  105   70  29353      2
1  164  143  107  18490      1
3  206  196  166   8063      3
In [10]:
find_color_palettes(sample_images[4])
images2/ARTB.P120060425/408.jpg
     R    G    B  count  label
2  255  251  240  51786      2
3   17   19   15  11442      3
1   56   63   46   5166      1
4  147  105   73   3065      4
0  203  188  130   2041      0
In [11]:
find_color_palettes(sample_images[5])
images2/asi2-114078/63.jpg
     R    G    B  count  label
0  191  184  181  51677      0
2  161  134  150  32539      2
4  132  105  103  32431      4
1   87   70   86  25863      1
3  198  176   81  11840      3
In [12]:
find_color_palettes(sample_images[6])
images2/asi2-116230/10.jpg
     R    G    B  count  label
1   43   57   66  33606      1
3   79   92   97  27744      3
2  171  176  175  26819      2
4  135  129  124  20724      4
0   91  146  153  13957      0
In [13]:
find_color_palettes(sample_images[7])
images2/asi2-103033/50.jpg
     R    G    B  count  label
0  176  156  126  55346      0
4  145  123   91  40892      4
1  109   75   44  29932      1
3   59   41   25  22775      3
2  201  192  175  20455      2
In [14]:
find_color_palettes(sample_images[8])
images2/asi2-108413/73.jpg
     R    G    B  count  label
4  144   92   47  35771      4
2   24   43   43  29975      2
3  111  112   72  24080      3
0  101   65   45  17865      0
1  180  182  173  14809      1
In [15]:
find_color_palettes(sample_images[9])
images2/asi2-117336/36.jpg
     R    G   B  count  label
3  228  191  64  19150      3
0   51   47  41  17706      0
1  220   89  49  17061      1
4   34  130  99  15814      4
2  141   44  41  12869      2
In [16]:
find_color_palettes(sample_images[10])
images2/missingImages/0612776/112.jpg
     R    G    B  count  label
2  196  175   45  26297      2
3  131  119   26  22881      3
1   61   63   22  22584      1
4   71  107   96  19177      4
0  103  147  135  17211      0
In [17]:
find_color_palettes(sample_images[11])
images2/asi2-112679/255.jpg
     R    G    B  count  label
1   93   77   59  13760      1
2  216  165   85   8946      2
3  170   95   64   7212      3
4  124  139  142   7089      4
0  212  202  189   5343      0
In [18]:
find_color_palettes(sample_images[12])
images2/asi2-101657/62.jpg
     R    G    B  count  label
0  221  200  167  34604      0
3  211  178  123  21994      3
1  193  143   64  16513      1
2  169  141  129   9547      2
4  115   81   63   6592      4
In [19]:
find_color_palettes(sample_images[13])
images2/asi2-100678/1.jpg
     R    G    B  count  label
1   87  102   95  30792      1
4  105  123  109  30417      4
3   65   83   81  27450      3
0   43   62   61  13860      0
2  135  142  131   8081      2
In [20]:
find_color_palettes(sample_images[14])
images2/asi2-109828/105.jpg
     R    G    B  count  label
3   24   29   24  43915      3
0  120   25   23  34554      0
2   18  114   73  21827      2
4  123   84   57  16040      4
1  161  159  148   6164      1
In [21]:
find_color_palettes(sample_images[15])
images2/missingImages/0989500/27.jpg
     R    G    B  count  label
0  221  187   59  32288      0
2  255  255  253  28895      2
3  108   63   39  21850      3
4  228  201  106  20031      4
1   36   22   15  19436      1